package com.ruoyi.system.mapper;

import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.system.domain.qo.UserListQo;
import com.ruoyi.system.domain.vo.AppUserVO;
import com.ruoyi.system.domain.vo.IndexVo;
import com.ruoyi.system.domain.vo.UserAdminListVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户信息 数据层
 *
 * @author ruoyi
 */
public interface AppUserMapper {
    /**
     * 查询用户信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    AppUser selectAppUserById(Long id);

    /**
     * 查询用户列表
     *
     * @param appUser 用户信息
     * @return 用户集合
     */
    List<AppUser> selectAppUserList(AppUser appUser);

    /**
     * 查询应用用户列表
     *
     * @return 应用用户列表
     */
    List<AppUserVO> selectUserList(UserListQo userListQo);

    /**
     * 查询应用用户列表
     *
     * @return 应用用户列表
     */
    List<UserAdminListVO> selectUserAdminList(UserListQo userListQo);

    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    AppUser checkUserName(String userName);

    /**
     * 新增用户
     *
     * @param appUser 用户信息
     * @return 结果
     */
    int insertAppUser(AppUser appUser);

    /**
     * 修改用户
     *
     * @param appUser 用户信息
     * @return 结果
     */
    int updateAppUser(AppUser appUser);

    /**
     * 删除用户
     *
     * @param id 用户ID
     * @return 结果
     */
    int deleteAppUserById(Long id);

    /**
     * 批量删除用户
     *
     * @param ids 需要删除的用户ID
     * @return 结果
     */
    int deleteAppUserByIds(Long[] ids);

    /**
     * 获取服务用户数量
     *
     * @param condition 条件 空或null 所有，1， 当前服务用户
     * @return 服务用户数量
     */
    Long getServiceUserCount(String condition);

    /**
     * 统计用户按小时注册数量
     *
     * @return 用户按小时注册统计列表
     */
    List<IndexVo> selectUserRegisterHourlyStats();

    /**
     * 统计用户按天注册数量
     *
     * @return 用户按天注册统计列表
     */
    List<IndexVo> selectUserRegisterDailyStats();

    /**
     * 重置用户密码
     *
     * @param id       用户id
     * @param password 密码
     * @return 结果
     */
    int updatePwd(@Param("id") Long id, @Param("password") String password);
}